package composite.topografias;

/**
 * @author Juan Manuel Ruiz
 * @version 1.0
 * @created 12-sep.-2013 11:38:16
 * 
 */



public class TopografiaMixta extends Topografia{

	private static final int MAX_TOPOGRAFIA = 4;
	protected Topografia [] topografias ;
	
	private Topografia [] getTopografias() {
		return topografias;
	}

	public TopografiaMixta(Topografia tp1,Topografia tp2,Topografia tp3,Topografia tp4) {
		this();
		try {
			add(tp1,0);
		} catch (ComposicionTopograficaInvalidaException e2) {
			// TODO Auto-generated catch block
			e2.printStackTrace();
		}
		try {
			add(tp2,1);
		} catch (ComposicionTopograficaInvalidaException e1) {
			// TODO Auto-generated catch block
			e1.printStackTrace();
		}
		try {
			add(tp3,2);
		} catch (ComposicionTopograficaInvalidaException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		try {
			add(tp4,3);
		} catch (ComposicionTopograficaInvalidaException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	public TopografiaMixta() {
		super();
		topografias = (new Topografia [4]);
		
	}

	@Override
	public double proporcionAgua() {
		double aux = 0;
		for(Topografia auxiliar : getTopografias()){
				aux += auxiliar.proporcionAgua();
			}		
		return aux/4;
	}

	@Override
	public double proporcionTierra() {
		double aux = 0;
		for(Topografia auxiliar : getTopografias()){
			aux += auxiliar.proporcionTierra();
		}
		return aux/4;
	}

	@Override
	protected Topografia getTopografia(int posicion) throws ComposicionTopograficaInvalidaException {
		if (posicion > MAX_TOPOGRAFIA) {
			throw new ComposicionTopograficaInvalidaException();}
		else
		

		return getTopografias()[posicion];
	}
	@Override
	protected void add(Topografia t, int posicion) throws ComposicionTopograficaInvalidaException {
		if (posicion > MAX_TOPOGRAFIA) {
			throw new ComposicionTopograficaInvalidaException();
		} else
			getTopografias()[posicion]=  t;
	}
	



	@Override
	public boolean esIgualA(Object pObject) {
		if (!(pObject instanceof TopografiaMixta))
		{
			return false;
		}
		else
		{
			for (int i = 0; i < getTopografias().length; i++) {
				Topografia origen = null;
				try {
					origen = getTopografia(i);
				} catch (ComposicionTopograficaInvalidaException e1) {
					// TODO Auto-generated catch block
					e1.printStackTrace();
				}
				Topografia nueva = null;
				try {
					nueva = ((TopografiaMixta)pObject).getTopografia(i);
				} catch (ComposicionTopograficaInvalidaException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				
				if (!(origen.equals(nueva)))
				{
					return false;
				}
			}
		}
		return true;
	}
	
	
	
}//end TopografiaMixta